/**
 * Date:2021年3月15日 上午10:49:09
 * Copyright (c) 2021, www.bwbroad.com All Rights Reserved
 */

package com.app.rabbit;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import com.rabbitmq.client.Channel;

/**
 * Description: Rabbit消息消费端 <br/>
 * Date:2021年3月15日 上午10:49:09 <br/>
 * 
 * @author xuejianxin
 */
@Component
@EnableRabbit
public class Test1Consumer {

	private static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(Test1Consumer.class);

	// =========================queueTest1===============================
	// 定义一个队列
	// 如果在RabbitMQ中通过其他方式已经创建过一个名叫testQueue的队列了，
	// 这里也可以不声明，这里起到的一个效果就是如果你没有这个队列，会按照你声明的方式帮你创建这个队列
	@Bean
	public Queue testQueue() {
		return new Queue("queueTest1" /* 队列名称 */, false/* 是否持久化 */);
	}

	// //简单模式是最简单的消息模式，它包含一个生产者、一个消费者和一个队列。生产者向队列里发送消息，消费者从队列中获取消息并消费。
	@RabbitListener(queues = "queueTest1")
	@RabbitHandler
	public void test1Handler1(Message message, Channel channel) throws Exception {
		// DeliveryTag代表的是这个消息在队列中的序号，这个信息存放在MessageProperties中
		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
		log.info("test1Handler1 msg={}", new String(message.getBody()));
	}

	// 第二个消费者
	@RabbitListener(queues = "queueTest1")
	@RabbitHandler
	public void test1Handler2(Message message, Channel channel) throws Exception {
		// DeliveryTag代表的是这个消息在队列中的序号，这个信息存放在MessageProperties中
		channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
		log.info("test1Handler2 msg={}", new String(message.getBody()));
	}
	// =========================queueTest1===============================

}
